文章目录

linux x86 栈溢出


环境:
1.系统kali linux x64
2.开发环境c语言
工具:
1.Gcc
2.Python
3.Pwntools
4.gdb
无防护下的栈溢出
1.漏洞程序源代码
//Flow.c 源代码

2.编译并关闭dep和栈保护
gcc -fno-stack-protector -z execsatck -m32 -o stack1 Flow.c

3.关闭ASLR
运行./close_aslr.sh
4.先生成一个字符串(使用pattern.py)

5.运行stack1,输入刚才生成的字符串,栈崩溃了

6.gdb调试

  1. 计算偏移位置

    8.重新生成长度为140的字符串再加上四个‘B’再次使用gdb调试可以看到崩溃的地址是0x42424242这正是“BBBB”的ASCII值

    9.查看缓冲区开始的地址
    x/20x $esp-144 或者 x/20s $esp-144 可以得到缓冲区的开始位置

    10.实际上这些地址都是gdb的调试地址,实际程序运行的地址并不是这些,实际的地址可以通过调试core获取,linux下默认是关闭的,可以通过ulimit -c查看,返回0即为关闭可以通过ulimit -c unlimited 设置成无限大小(仅限本终端),(永久生效在/etc/profile中写入 source 立即失效)
    在设置一下core生成的位置echo ‘/core/core%e%p’> /proc/sys/kernel/core_pattern
    (路径必须存在)
    11.再次运行stack1,输入140‘A’+4‘B’可以看到生成了core dump

    12.运行gdb 调试附加stack1和生成的core文件,可以看到断在0x42424242也就是BBBB

    13.查看一下缓冲区的开始地址为0xffffccd0(不同机子可能不一样)

    14.找一个shellcode

    15.运行一个看一下效果,拿下shell

总结:
这是在没有防护下的栈溢出,在防护下怎绕过,将在下次带给大家!!!

文章目录